import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase maneja al enemigo rambi el cual sera uno de los obstaculos para el jugador.
 * 
 * @author Programacion Orientada a Objetos(Jose de Jesus Cervantes Hernandez) 
 */
public class rambi extends Actor
{
     /**
     * Arreglo imagenes del movimiento hacia la derecha.
     */
    private GreenfootImage[]WalkE;
    
     /**
     * Arreglo imagenes del movimiento hacia la izquierda.
     */
    private GreenfootImage[]WalkW;
    
     /**
     * Referencia de un obstaculo para que no se pueda mover el enemigo.
     */
    private rock obstaculo;

     /**
     * Maxima cantidad de imagenes a leer para el movimiento a la derecha.
     */
    private static final int maxd = 9;
    
     /**
     * Maxima cantidad de imagenes a leer para el movimiento a la izquierda.
     */
    private static final int maxi = 9;
    
     /**
     * Numeros de bits que avanza en cada paso.  
     */
    private static final int camina = 4;
    
    /**
     * Variable que indica asi donde debe caminar (1 ala derecha 0 a la izquierda ).
     */
    private int dir = 1;
   
     /**
     * Indice para los arreglos de imagenes.
     */
    private int indice = 1;
    
     /**
     *Variable que indica su posicion actual en X.
     */
    private int X = 0;
    
     /**
     *Variable que indica su posicion actual en Y.
     */
    private int Y = 0;
    
     /**
     * Variable que guarda su posicion inicial en X.
     */
    private int iniX;
    
     /**
     * Variable que guarda su posicion inicial en Y.
     */
    private int iniY;
    
     /**
     * Variable para la captura de las posiciones iniciales.
     */
    private int band = 0;
    
    /**
     * Constructor para la clase Bombi
     */
    public rambi ()
    {
        WalkE = new GreenfootImage[maxd];
        WalkW = new GreenfootImage[maxi];
        
        for(int i=1; i < maxd; i++)
        {
             WalkE[i] = new GreenfootImage("rambiI"+i+".png");
        }
        for(int i=1; i < maxi; i++)
        {
             WalkW[i] = new GreenfootImage("rambiD"+i+".png");
        }
    }
    
     /**
     * Metodo Act, se encarga del manejo de la actuacion de rambi.
     */
    public void act() 
    {
        if(band == 0)
        {
            iniX = this.getX();
            iniY = this.getY();
            band = 1;
        }
        
        X = this.getX();
        Y = this.getY();
      
        mover(); 
    }    
    
      /**
     * Identifica si se encuentra una obstruccion para el enemigo deje de caminar.
     */
    public boolean buscaChoque()
    {
        obstaculo = (rock)this.getOneObjectAtOffset(5,0, rock.class);
        if(obstaculo!=null)
        {
            return true;
        }
        else
            return false;
    }
    
     /**
     * Este metodo sirve para verificar el movimiento del enemigo y la direccion. 
     */
     public void mover()
    {        
        if(dir == 1)
        {
          this.setLocation(X+camina,Y);
          this.setImage( WalkE[ indice<maxd?indice++:(indice=1)] );
          if(buscaChoque())
          {
               dir = 0;  
               indice = 1;
          }
        }
        
        if(dir == 0)
        {
          this.setLocation(X-camina,Y);
          this.setImage( WalkW[ indice<maxi?indice++:(indice=1)] );
         if(buscaChoque())
          {
               dir = 1;  
               indice = 1;
          }
        }
    }
}
